package cn.core.coding.service.intf;

import cn.core.coding.ao.ProConfAO;
import cn.core.coding.ao.ProConfAndDbTableConfAO;
import cn.core.coding.eo.DbTableConf;
import cn.core.coding.eo.ProjectModule;
import cn.core.coding.vo.DbTableConfAndInfoVO;
import cn.core.coding.vo.DbTablesInfoVO;
import cn.core.coding.vo.ProjectModuleConfVO;
import cn.core.tool.util.CoreTree;

import java.util.Collection;

/**
 * 生成代码 服务接口
 */
public interface ICodingService {

  /**
   * 动态添加当前账号对应项目模块的数据源
   */
  public void addDataSource(String projectModuleId) throws Exception;

  /**
   * 获取数据库所有表信息
   */
  public Collection<DbTablesInfoVO> getDbAllTablesInfo(String projectModuleId) throws Exception;

  /**
   * 数据库表配置 >>> 批量保存或修改
   */
  public Collection<DbTableConf> batchSaveOrUpdateDbTableConf(Collection<DbTableConf> eos) throws Exception;

  /**
   * 获取项目模块数据库表配置树
   */
  public CoreTree<?> getProjectModuleDbTableConfTreeData(String projectModuleId) throws Exception;

  /**
   * 项目配置和数据库表配置 >>> 设置参数
   */
  public ProConfAndDbTableConfAO toProConfAndDbTableConfParam(ProjectModule projectModule, DbTableConf dbTableConf) throws Exception;

  /**
   * 获取项目模块配置
   */
  public ProjectModuleConfVO getProjectModuleConf(ProConfAO proConfParam) throws Exception;

  /**
   * 生成项目模块
   */
  public void generateProjectModule(ProjectModuleConfVO projectModuleConfVO) throws Exception;

  /**
   * 获取数据库表配置和信息
   */
  public DbTableConfAndInfoVO getDbTableConfAndInfo(ProConfAndDbTableConfAO proConfAndDbTableConfParam) throws Exception;

  /**
   * 生成实体类文件
   */
  public void generateEntityFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成查询类文件
   */
  public void generateQueryFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成展示类文件
   */
  public void generateVoFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成mapper持久化接口类文件
   */
  public void generateMapperPersistentInterfacesFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成mapper sql文件
   */
  public void generateMapperSqlFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成服务接口类文件
   */
  public void generateServiceInterfacesFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成服务实现类文件
   */
  public void generateServiceImplementFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成rest接口类文件
   */
  public void generateRestFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 删除代码文件 >>> pro
   */
  public void delProCodeFiles(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue实体类文件
   */
  public void generateVueEntityFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue查询类文件
   */
  public void generateVueQueryFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue展示类文件
   */
  public void generateVueVoFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue api服务类文件
   */
  public void generateVueApiServiceFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue store文件
   */
  public void generateVueStoreFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 生成vue页面文件
   */
  public void generateVueViewFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 删除代码文件 >>> vue
   */
  public void delVueCodeFiles(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 重新生成查询类文件
   */
  public void regenerateQueryFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 重新生成展示类文件
   */
  public void regenerateVoFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 重新生成mapper sql文件
   */
  public void regenerateMapperSqlFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 重新生成vue查询类文件
   */
  public void regenerateVueQueryFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

  /**
   * 重新生成vue展示类文件
   */
  public void regenerateVueVoFile(DbTableConfAndInfoVO dbTableConfAndInfoVO) throws Exception;

}
